<?php


$msg = new WechatMsgHandler($msgxml);
$msg->responseMsg();

/**
 * 消息工厂
 */
class WechatMsgHandler
{
	public $receiveMsg; // 收到微信服务器的信息
	public $sendMsg;    // 发送信息到服务器
	public function __construct($msgxml)
	{
		$this->makeReceive($msgxml);
		$data = $this->getConfig();
		$this->makeSend($data);
	}
	
	/**
	 * 构建收到的信息
	 */
	public function makeReceive($msgxml)
	{
		switch ($msgxml->MsgType) {
			case 'text':
				$msg = new WechatRTextMsg($msgxml);
				break;

			case 'image':
            	$msg = new WechatRImageMsg($msgxml);
				break;
            
			case 'voice':
	            $msg = new WechatRVoiceMsg($msgxml);
				break;
            
			case 'video':
            	$msg = new WechatRVideoMsg($msgxml);
				break;
            
			case 'music':// TODO:音乐
				break;
            
			case 'news': // TODO:图文
				break;

			case 'event': // 事件消息
				HandlerEventMsg::handler($msgxml);
				break;
			
			default:
				break;
		}
        
        if(isset($msg)){
			$this->receiveMsg = $msg;
        }
	}

	/**
	 * 获取回复消息配置
	 * TODO:业务需要写到这来
	 * 暂时 发送什么类型消息返回什么类型什么消息
	 */
	public function getConfig()
	{
		if (empty($rece = $this->receiveMsg)) {
			return ;
		}
		$conf = [
			'from' =>$rece->toUserName,
			'to'   =>$rece->fromUserName
		];
		switch ($rece->msgType) {

			case 'text':
				$data = [
					'type'=>'text',
                    'content'=>'回:'.$rece->content];
				break;

			case 'image':
				$data = [
					'type'=>'image',
					'picUrl'=>$rece->picUrl,
                	'mediaId'=>$rece->mediaId];
				break;
            
			case 'voice':
				$data = [
					'type'=>'voice',
                	'mediaId'=>$rece->mediaId];
				break;

			case 'video':
				$data = [
					'type'=>'video',
                	'mediaId'=>$rece->mediaId,
                	'title'=>'搞笑视频',
                	'desc'=>'你发的视频消息'];
				break;

			case 'music':// TODO:音乐
				break;
            
			case 'news': // TODO:图文
				break;

			case 'event': // TODO:事件
				break;
			
			default:
				$data = [];
				break;
		}

		return array_merge($data, $conf);
	}
	
	/**
	 * 构建发送信息
	 */
	public function makeSend($data)
	{
		switch ($data['type']) {
			case 'text':
				$msg = new WechatSendTextMsg($data);
				break;

			case 'image':
				$msg = new WechatSendImageMsg($data);
				break;
            
			case 'voice':
				$msg = new WechatSendVoiceMsg($data);
				break;

			case 'video':
				$msg = new WechatSendVideoMsg($data);
				break;

			case 'music':// TODO:音乐
				break;
            
			case 'news': // TODO:图文
				break;

			case 'event': // TODO:事件
				break;
			
			default:
				# code...
				break;
		}
        if(isset($msg)){
			$this->sendMsg = $msg;
        }
	}

	/**
	 * 响应消息
	 */
	public function responseMsg()
	{
		if ($this->sendMsg) {
			$this->sendMsg->responseMsg();
		}
	}
}
